#! /usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2020/10/14 20:01
# @Author : youngchaolin


# import xxx：导入一个模块的所有成员
# import aaa,bbb：一次性导入多个模块成员，不推荐这种写法
# from xxx import a：从模块xxx中导入指定的成员a
# from xxx import a,b,c：从模块xxx中导入指定成员a b c
# from xxx import *：从模块xxx中导入所有成员

# import xxx和from xxx import *的区别
# 第一种导入在使用成员变量时，必须使用模块名作为前缀
# 第二种导入在使用成员变量时，不需要使用模块名作为前缀，直接使用成员名

import os,sys
sys.path.append(os.path.dirname(__file__)+'/test')
# import xxx和from xxx import a的区别

# import m
# print(m.a)

# a=100

from m import a
a=100
print(a) # 打印结果要看a=100的位置，采取就近原则

# import xxx是永远不会产生命名冲突
# from xxx import a 可能导致命名冲突，如果当前模块中也定义了a
# 就导致命名冲突

# 怎么解决命名冲突
# 1 直接使用import xxx
# 2 使用别名alias解决冲突
from m import a as b
print(b) # a和上面定义的属性有冲突，使用别名b解决

# 也可以给模块起别名，可以缩短别名长度，使用书写方便
import m as m_module
print(m_module.a)


# from xxx import * 控制成员被导入
# 默认情况下所有成员会被导入
# __all__是一个列表，里面存放本模块可以被外界使用的成员，列表的元素是成员名的字符串形式

from m import *
print(age)
print(a)
# print(score) # 访问不到score

# 使用import xxx as a可以绕过__all__
import m as m_module
print(m_module.age)
print(m_module.a)
print(m_module.score)

# __all__只对from xxx import * 这种导入方式有效，其余的方式都不生效


'''
相对导入，本项目中test目录下h.py和m.py两个模块可以做相对导入
'''









